﻿using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;

namespace ABFramework
{

    /// <summary>
    /// 自定义的编辑器窗口
    /// </summary>
    public class DeployByViewport : EditorWindow
    {
        static string line = "--------------------";
        static string version = "Version-220302151834";                    //正式资源版本号
        static string test_version = "Version-220302151834";               //测试资源使用的版本号
        static string app_version = "1.0.0";                               //app版本号
        static bool must_update = true;                                    //有新的资源是否必须更新
        static EditorWindow win = null;


        [MenuItem("Tools/配置项目并发布", false, 1)]
        public static void ShowWindow()
        {
            // 显示某个编辑器窗口。传参即是要显示的窗口类型（类名）
            win = EditorWindow.GetWindow(typeof(DeployByViewport), true, "配置项目并发布");
            win.minSize = new Vector2(600, 300);
            win.maxSize = new Vector2(600, 300);

            //读取本地热更资源版本配置文件恢复显示
            string config_file = Application.dataPath + "/../" + PathTools.BUILD_AB_OUT_PATH + "/" + PathTools.UPDATE_VERSION_CONFIG;
            if (File.Exists(config_file))
            {
                //热更资源版本配置文件数据对象-取到版本号
                VersionObject vobj = JsonUtility.FromJson<VersionObject>(File.ReadAllText(config_file));
                version = vobj.version;
                test_version = vobj.test_version;
                app_version = vobj.app_version;
                must_update = vobj.must_update;
                Debug.Log("本地热更资源版本配置恢复完成!");
            }
            else
            {
                Debug.Log("项目发布目录没找到热更资源配置文件，发布前请先配置!");
            }
        }

        /// <summary>
        /// 关闭本窗口
        /// </summary>
        public static void CloseWindow()
        {
            if (win != null) win.Close();
        }

        void OnGUI()
        {
            // 提示文本
            GUILayout.Label("提示:设置后点击生成资源版本配置可直接在发布目录生成版本配置文件");


            GUILayout.Label(line + line + line + line + line);
            // 可以编辑，编辑后用同一个变量保存结果
            version = EditorGUILayout.TextField("1.设置资源版本号:", version);

            //生成版本号
            if (GUILayout.Button("单击此按钮:以当前时间创建版本号.各个平台的发布资源时的版本号应该一致,否则不能发布到同一个目录!"))
            {
                version = "Version-" + CommonTools.GetNowTimeAndFormat("yyMMddHHmmss");
                Debug.Log("当前时间对应的版本号：" + version);
            }
            GUILayout.Space(10);


            // 更新选项
            must_update = EditorGUILayout.Toggle("2.资源有更新玩家必须更新", must_update);
            GUILayout.Space(10);

            //测试资源版本号（可不填）
            test_version = EditorGUILayout.TextField("3.测试资源资源版本号:", test_version);


            //保存版本配置选项
            if (GUI.Button(new Rect(479, 152, 110, 22), "生成资源版本配置"))
            {
                CreateVersionFile();
            }

            //删除版本配置选项
            if (GUI.Button(new Rect(360, 152, 110, 22), "删除资源版本配置"))
            {
                string config_file = Application.dataPath + "/../" + PathTools.BUILD_AB_OUT_PATH + "/" + PathTools.UPDATE_VERSION_CONFIG;
                if (File.Exists(config_file)) File.Delete(config_file);
                Debug.Log("删除版本配置信息完成!");
            }

            #region 最下方的按钮组

            //----------定义项目发布快捷方式--------------
            GUILayout.Space(40);
            GUILayout.Label(line);
            GUILayout.Label("选择平台发布资源");
            GUILayout.Label(line + line + line + line + line);

            //To Android
            if (GUI.Button(new Rect(5, 235, 110, 22), "发布Android资源"))
            {
                DeployAssetsBundle.DeployAndroidPlatformAssetsBundle();
            }
            //To iOS
            if (GUI.Button(new Rect(120, 235, 110, 22), "发布iOS资源"))
            {
                DeployAssetsBundle.DeployiOSAssetsBundle();
            }
            //To Windows
            if (GUI.Button(new Rect(241, 235, 110, 22), "发布Windows资源"))
            {
                DeployAssetsBundle.DeployWindowsAssetsBundle();
            }
            //打开最终发布目录
            if (GUI.Button(new Rect(362, 235, 110, 22), "打开热更目录"))
            {
                OperateDirectory.OpenLastDeployDirectory();
            }
            //更新lua代码到发布目录
            if (GUI.Button(new Rect(480, 235, 110, 22), "更新lua[3,4,5]"))
            {
                CopyLuaScripts.DoCopyLuaScripts();
                CreateVerifyFile.CreateTheVerifyFile();
                DeployAssetsBundle.CopyHotupdteFileToDeployDirectory();
            }
            //对当前的选定版本进行增量更新
            if (GUI.Button(new Rect(141, 265, 88, 22), "增量更新"))
            {
                //TODO
            }

            //复制资源到热更目录
            if (GUI.Button(new Rect(5, 265, 130, 22), "Step 5复制到热更目录"))
            {
                DeployAssetsBundle.CopyHotupdteFileToDeployDirectory();
            }

            #endregion
        }

        /// <summary>
        /// 创建版本文件信息
        /// </summary>
        void CreateVersionFile()
        {
            VersionObject vobj = new VersionObject(must_update, version, test_version, app_version, null);
            string desc = JsonUtility.ToJson(vobj);

            //配置文件路径
            string out_path = Application.dataPath + "/../" + PathTools.BUILD_AB_OUT_PATH;
            string config_file = out_path + "/" + PathTools.UPDATE_VERSION_CONFIG;

            //检测是文件和目录
            if (!Directory.Exists(out_path)) Directory.CreateDirectory(out_path);
            if (File.Exists(config_file)) File.Delete(config_file);

            File.Create(config_file).Dispose();

            //添加文件内容
            using (StreamWriter sw = new StreamWriter(config_file, true))
            {
                sw.WriteLine(desc);
            }

            Debug.Log("创建版本配置信息完成：" + desc);
        }
    }

}
